class PaineisController < ApplicationController
    skip_before_filter :authenticate

    before_filter :comercial, :only => [:celcli, :wm, :resumo]
    before_filter :load_depositos, :only => [:soma_por_status, :soma_por_status!, :gera_dados_resumo]
    before_filter :load_settings, :only => [:celcligerais, :footer, :wm, :celcli, :resumo, :faturamentos, :faturamento_mes]
    
    cache_sweeper :state_sweeper
    
    def celcligerais
        respond_to  do |format|
            format.html
        end
    end	

    def celcligerais_partial
        unless read_fragment :fragment => 'celcligerais_partial_cache'
            @depositos = Deposito.find(:all,
                    :include => [:transportes], 
                    :conditions => ['transportes.status_id != ?
                          and transportes.status_id != ?', "#{$LIB}", "#{$CANC}"],
                    :order => "depositos.nome asc, transportes.status_id asc")                  
        end
        
        render :partial => 'depositoscelcligerais'		
    end
    
    def celcli
        respond_to  do |format|
            format.html
        end
    end

    def celcli_partial
      unless read_fragment :fragment => 'celcli_partial_cache'
        @depositos = Deposito.box_preenchido.find(:all,
                :include => [:transportes, :armazenamentos],
                :conditions => ['transportes.status_id != ?
                      and transportes.status_id != ?', "#{$LIB}", "#{$CANC}"],
                :order => "nome asc, armazenamentos.box asc, transportes.status_id asc")
      end
        render :partial => 'depositoscelcli'
    end

    def wm
        respond_to  do |format|
            format.html
        end
    end

    def wm_partial
      unless read_fragment :fragment => 'wm_partial_cache'
        @depositos = Deposito.find(:all,
                :include => ['transportes'],
                :conditions => ['transportes.status_id = ?
                        or transportes.status_id = ?
                        or transportes.status_id = ?', "#{$GDO}","#{$FG}","#{$GDO_CNF}"],
                :order => "nome asc, transportes.status_id asc")
      end
        render :partial => 'depositoswm'
    end    

    def resumo
        respond_to do |format|
            format.html
        end
    end

    def resumo_partial		
        @depositos = Deposito.find(:all, :order => "qtbox desc")
        gera_dados_resumo
        render :partial => 'resumo'
    end

    def footer
    	#config = Setting.find(:first)
    	@msg = @config.msg
    	if @config.exibe_msg && !@config.msg.blank?
    		render :partial => 'footer'
    	elsif @config.exibe_msg && config.msg.blank?
    		render :partial => 'footer_status'
    	elsif !@config.exibe_msg
    		render :nothing => true
    		#render :text => 'errado'
    	end
    end

	def faturamentos		
        respond_to do |format|
            format.html
        end		
	end
	
	def faturamentos_partial
		faturamento_mes		
		render :partial => 'faturamentos'	
	end
	
	def faturamento_dia
	
	end
	
	def faturamento_mes
		meses =    {
					1 => 'Janeiro', 
					2 => 'Fevereiro', 3 => 'Mar&ccedil;o', 4 => 'Abril', 
					5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 
					8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 
					11 => 'Novembro', 12 => 'Dezembro'
					}					
					
        @depositos = Deposito.find(:all, :order => "nome ASC, qtbox desc")
		
		valor = []
		@depositos.each do |d|
			valor << "#{d.nome.downcase}".to_sym
			valor << 0
		end
		valor << "total".to_sym
		valor << 0
		@soma = Hash[*valor]
		
		@faturamentos = []
				
		(1..12).each do |t|
		
			mes = Time.zone.local(Deposito.new.current_time.year,t.to_i)			
		
			#Faturados durante o MES
			fat_mes = soma_por_status($FAT, {:mes => mes})
			lib_mes = soma_por_status($LIB, {:mes => mes})
			cdo_cnf_mes = soma_por_status($CDO_CNF, {:mes => mes})
			gdo_cnf_mes = soma_por_status($GDO_CNF, {:mes => mes})
			sep_cnf_mes = soma_por_status($SEP_CNF, {:mes => mes})
			cndo_cnf_mes = soma_por_status($CNDO_CNF, {:mes => mes})
			conf_cnf_mes = soma_por_status($CONF_CNF, {:mes => mes})				
			
			#INÍCIO - Faturamento do Mês
			faturamento_mes = []
			soma = []
			fat = []
			total, valor = 0, 0
			@depositos.each do |d|
				faturamento_mes << "#{d.nome.downcase}".to_sym
				
				valor  = d.faturamento_anterior(d.id, mes) 				
				valor += cdo_cnf_mes[d.nome.downcase.to_sym]
				valor += sep_cnf_mes[d.nome.downcase.to_sym]
				valor += cndo_cnf_mes[d.nome.downcase.to_sym]
				valor += conf_cnf_mes[d.nome.downcase.to_sym]						
				valor += gdo_cnf_mes[d.nome.downcase.to_sym] 
				valor += lib_mes[d.nome.downcase.to_sym] 
				
				faturamento_mes << valor
				total += valor
				@soma["#{d.nome.downcase}".to_sym] += valor
				@soma[:total] += valor
			end			
			faturamento_mes << "total".to_sym
			faturamento_mes << total
		
			faturamento_mes << "mes".to_sym
			faturamento_mes << meses[t]					
					
			@faturamentos << Hash[*faturamento_mes]
			#FIM - Faturamento do Mês								
		end	
	end

    def comercial
        config = Setting.find(:first)
        unless config.nil?
            unless config.exibe_comercial.nil?
                @exibe_comerical = config.exibe_comercial
                if @exibe_comercial
                end
            else
                @exibe_comerical = false
            end

            if !config.tempo_comercial_on.nil? || config.tempo_comercial_on != ""
                @tempo_comercial_on = config.tempo_comercial_on
            else
                @tempo_comercial_on = 10000
            end

            if !config.tempo_comercial_off.nil? || config.tempo_comercial_off != ""
                @tempo_comercial_off = config.tempo_comercial_off
            else
                @tempo_comercial_off = 5000
            end
            @url_comercial = conteudo_comercial
            @extenssao = conteudo_comercial
        end
    end

    def conteudo_comercial
        if File.directory?('public/images/comercial')
            conteudo = Dir.entries('public/images/comercial')
            conteudo.delete(".")
            conteudo.delete("..")
            conteudo.delete(".svn")
            valida_conteudo_comercial(conteudo)
        else
            @conteudo = ''
            @url_conteudo = ''
        end
        @extenssao
    end

    def valida_conteudo_comercial(conteudo)
        midias = ['flv', 'swf', 'wmp']
        img = ['jpg', 'gif', 'png']
        unless conteudo.empty? and !conteudo.nil?
            arquivo = conteudo[rand(conteudo.size)]
            ext = File.extname(arquivo.to_s)
            unless ext.empty?
                ext = ext.gsub(/[.]/, '')
                if img.include?(ext)
                    return @extenssao = 'img', @url_conteudo = arquivo.to_s
                else
                    if midias.include?(ext)
                        return @extenssao = ext.to_s, @url_conteudo = arquivo.to_s
                    else
                        valida_conteudo_comercial(conteudo)
                    end
                end
            else
                valida_conteudo_comercial(conteudo)
            end
        else
            return @extenssao = 'img', @url_conteudo = arquivo.to_s
        end
    end

    def gera_dados_resumo
        #@depositos = Deposito.find(:all)

        @hoje = Deposito.new.current_time
        @mes = Deposito.new.current_time
        @ontem = Deposito.new.yesterday
        @ontem_mes = Deposito.new.yesterday.beginning_of_month.utc

        #INÍCIO - Soma por Status
        @fg = cache($Cache_fg, "soma_por_status($FG)")
        @conf = cache($Cache_conf, "soma_por_status($CONF)")
        @sep = cache($Cache_sep, "soma_por_status($SEP)")
        @cdo = cache($Cache_cdo, "soma_por_status($CDO)")
        @gdo = cache($Cache_gdo, "soma_por_status($GDO)")
        @cndo = cache($Cache_cndo, "soma_por_status($CNDO)")

        #Faturados durante o Dia corrente
        @fat = cache($Cache_fat, "soma_por_status($FAT, {:hoje => @hoje})")
        @lib = cache($Cache_lib, "soma_por_status($LIB, {:hoje => @hoje, :lib_hoje => @hoje})")
        @cdo_cnf = cache($Cache_cdo_conf, "soma_por_status($CDO_CNF, {:hoje => @hoje})")
        @gdo_cnf = cache($Cache_gdo_cnf, "soma_por_status($GDO_CNF, {:hoje => @hoje})")
        @sep_cnf = cache($Cache_sep_conf, "soma_por_status($SEP_CNF, {:hoje => @hoje})")
        @cndo_cnf = cache($Cache_cndo_conf, "soma_por_status($CNDO_CNF, {:hoje => @hoje})")
        @conf_cnf = cache($Cache_conf_cnf, "soma_por_status($CONF_CNF, {:hoje => @hoje})")

        #Faturados e não liberados com data de faturamento diferente de hoje
        @fat_ontem = cache($Cache_fat_ontem, "soma_por_status!($FAT, {:hoje => @hoje})")
        @lib_ontem = cache($Cache_lib_ontem, "soma_por_status!($LIB, {:lib_hoje => @hoje})") 
        @cdo_cnf_ontem = cache($Cache_cdo_cnf_ontem, "soma_por_status!($CDO_CNF, {:hoje => @hoje})")
        @gdo_cnf_ontem = cache($Cache_gdo_cnf_ontem, "soma_por_status!($GDO_CNF, {:hoje => @hoje})")
        @sep_cnf_ontem = cache($Cache_sep_cnf_ontem, "soma_por_status!($SEP_CNF, {:hoje => @hoje})")
        @cndo_cnf_ontem = cache($Cache_cndo_cnf_ontem, "soma_por_status!($CNDO_CNF, {:hoje => @hoje})")
        @conf_cnf_ontem = cache($Cache_conf_cnf_ontem, "soma_por_status!($CONF_CNF, {:hoje => @hoje})")
		
        #Faturados durante o MES
        @fat_mes = cache($Cache_fat_mes, "soma_por_status($FAT, {:mes => @mes})")
        @lib_mes = cache($Cache_lib_mes, "soma_por_status($LIB, {:mes => @mes})")
        @cdo_cnf_mes = cache($Cache_cdo_cnf_mes, "soma_por_status($CDO_CNF, {:mes => @mes})")
        @gdo_cnf_mes = cache($Cache_gdo_cnf_mes, "soma_por_status($GDO_CNF, {:mes => @mes})")
        @sep_cnf_mes = cache($Cache_sep_cnf_mes, "soma_por_status($SEP_CNF, {:mes => @mes})")
        @cndo_cnf_mes = cache($Cache_cndo_cnf_mes, "soma_por_status($CNDO_CNF, {:mes => @mes})")
        @conf_cnf_mes = cache($Cache_conf_cnf_mes, "soma_por_status($CONF_CNF, {:mes => @mes})")
		
        #@canc = soma_por_status($CANC)
        #FIM - Soma por Status

        #INÍCIO - Soma dos Transportes em separação
        #Em separação
        em_separacao = []
        total, valor  = 0, 0
        @depositos.each do |d|
            em_separacao << "#{d.nome.downcase}".to_sym
            valor = @sep[d.nome.downcase.to_sym] + @cdo[d.nome.downcase.to_sym] + @cndo[d.nome.downcase.to_sym] + @conf[d.nome.downcase.to_sym]
            em_separacao << valor
            total += valor
        end
        em_separacao << "total".to_sym
        em_separacao << total
        @em_separacao = Hash[*em_separacao]
        @em_separacao.symbolize_keys

        #Em separação com Nota Fiscal
        em_separacao_cnf = []
        total, valor  = 0, 0
        @depositos.each do |d|
            em_separacao_cnf << "#{d.nome.downcase}".to_sym
            valor = @cdo_cnf[d.nome.downcase.to_sym] + @sep_cnf[d.nome.downcase.to_sym] + @cndo_cnf[d.nome.downcase.to_sym] + @conf_cnf[d.nome.downcase.to_sym]
            em_separacao_cnf << valor
            total += valor
        end
        em_separacao_cnf << "total".to_sym
        em_separacao_cnf << total
        @em_separacao_cnf = Hash[*em_separacao_cnf]
        @em_separacao_cnf.symbolize_keys
        #FIM - Soma dos Transportes em separação

        #INICIO - Soma dos Transportes em separação com Nota Fiscal durante o dia de ontem
        em_separacao_cnf_ontem = []
        total, valor  = 0, 0
        @depositos.each do |d|
            em_separacao_cnf_ontem << "#{d.nome.downcase}".to_sym
            valor =  @cdo_cnf_ontem[d.nome.downcase.to_sym]
            valor += @sep_cnf_ontem[d.nome.downcase.to_sym]
            valor += @cndo_cnf_ontem[d.nome.downcase.to_sym]
            valor += @conf_cnf_ontem[d.nome.downcase.to_sym]
            em_separacao_cnf_ontem << valor
            total += valor
        end
        em_separacao_cnf_ontem << "total".to_sym
        em_separacao_cnf_ontem << total
        @em_separacao_cnf_ontem = Hash[*em_separacao_cnf_ontem]
        @em_separacao_cnf_ontem.symbolize_keys
        #FIM - Soma dos Transportes em separação com Nota Fiscal durante o dia de ontem
		
        #INICIO - Soma dos Transportes em separação com Nota Fiscal durante o mês corrente
        em_separacao_cnf_mes = []
        total, valor  = 0, 0
        @depositos.each do |d|
            em_separacao_cnf_mes << "#{d.nome.downcase}".to_sym
            valor = @cdo_cnf_mes[d.nome.downcase.to_sym]
            valor += @sep_cnf_mes[d.nome.downcase.to_sym]
            valor += @cndo_cnf_mes[d.nome.downcase.to_sym]
            valor += @conf_cnf_mes[d.nome.downcase.to_sym]
            em_separacao_cnf_mes << valor
            total += valor
        end
        em_separacao_cnf_mes << "total".to_sym
        em_separacao_cnf_mes << total
        @em_separacao_cnf_mes = Hash[*em_separacao_cnf_mes]
        @em_separacao_cnf_mes.symbolize_keys
        #FIM - Soma dos Transportes em separação com Nota Fiscal durante o mês corrente		

        #INÍCIO - Soma do dia - Encapsular isso dentro de um método
        soma_do_dia = []
        total, valor  = 0, 0
        @depositos.each do |d|
            soma_do_dia << "#{d.nome.downcase}".to_sym
            valor =  @fg[d.nome.downcase.to_sym]
            valor += @gdo[d.nome.downcase.to_sym]
            valor += @gdo_cnf[d.nome.downcase.to_sym]
            valor += @em_separacao[d.nome.downcase.to_sym]
            valor += @em_separacao_cnf[d.nome.downcase.to_sym]
            valor += @lib[d.nome.downcase.to_sym]
            soma_do_dia << valor
            total += valor
        end
        soma_do_dia << "total".to_sym
        soma_do_dia << total
        @soma_do_dia = Hash[*soma_do_dia]
        @soma_do_dia.symbolize_keys
        # FIM - Soma do dia - Encapsular isso dentro de um método


        #INÍCIO - Soma do dia dos Transportes Faturados no Mês Corrente - Encapsular isso dentro de um método
        soma_do_dia_ontem = []
        total, valor  = 0, 0
        @depositos.each do |d|
            soma_do_dia_ontem << "#{d.nome.downcase}".to_sym
            valor = @gdo_cnf_ontem[d.nome.downcase.to_sym]
            valor += @em_separacao_cnf_ontem[d.nome.downcase.to_sym]
            valor += @lib_ontem[d.nome.downcase.to_sym]
            soma_do_dia_ontem << valor
            total += valor
        end
        soma_do_dia_ontem << "total".to_sym
        soma_do_dia_ontem << total
        @soma_do_dia_ontem = Hash[*soma_do_dia_ontem]
        @soma_do_dia_ontem.symbolize_keys
        # FIM - Soma do dia dos Transportes Faturados no Mês Corrente - Encapsular isso dentro de um método

        # INÍCIO - Somas
        @soma_cnf = @gdo_cnf[:total] + @sep_cnf[:total] + @conf_cnf[:total] + @cndo_cnf[:total] + @cdo_cnf[:total]
        @total_cnf = @soma_cnf + @lib[:total]

        @soma_snf = @gdo[:total] + @sep[:total] + @conf[:total] + @cndo[:total] + @cdo[:total] + @fg[:total]
        @total_snf = @soma_snf
        # FIM - Somas

        # INÍCIO - Totais Gerais
        @gdo_geral = @gdo[:total] + @gdo_cnf[:total]
        @sep_geral = @sep[:total] + @sep_cnf[:total]
        @conf_geral = @conf[:total] + @conf_cnf[:total]
        @cndo_geral = @cndo[:total] + @cndo_cnf[:total]
        @cdo_geral = @cdo[:total] + @cdo_cnf[:total]

        @soma_geral = @gdo_geral + @sep_geral + @conf_geral + @cndo_geral + @cdo_geral + @fg[:total]
        @total_geral = @soma_geral + @lib[:total]
        # FIM - Totais Gerais
		
		#INÍCIO - Faturamento do dia
		faturamento_dia = []
		total, valor = 0,0
		@depositos.each do |d|
			faturamento_dia << "#{d.nome.downcase}".to_sym
			valor = @gdo_cnf[d.nome.downcase.to_sym] 
			valor += @em_separacao_cnf[d.nome.downcase.to_sym] 
			valor += @lib[d.nome.downcase.to_sym]
			faturamento_dia << valor			
			total += valor
		end
		faturamento_dia << "total".to_sym
		faturamento_dia << total
		@faturamento_dia = Hash[*faturamento_dia]
		@faturamento_dia.symbolize_keys
		#FIM - Faturamento do dia

        #INÍCIO - Faturamento do Mês
        faturamento_mes = []
        total, valor = 0, 0
        @depositos.each do |d|
            faturamento_mes << "#{d.nome.downcase}".to_sym
            valor  = d.faturamento_anterior(d.id, @mes) 
			valor += @em_separacao_cnf_mes[d.nome.downcase.to_sym] 
			valor += @gdo_cnf_mes[d.nome.downcase.to_sym] 
			valor += @lib_mes[d.nome.downcase.to_sym] 
		    #valor += @fat[d.nome.downcase.to_sym]
            faturamento_mes << valor
            total += valor
        end
        faturamento_mes << "total".to_sym
        faturamento_mes << total

        @faturamento_mes = Hash[*faturamento_mes]
        @faturamento_mes.symbolize_keys
        #FIM - Faturamento do Mês

    end

    def soma_por_status(status, options = {})
        #@depositos = Deposito.find(:all)
        total = 0
        resultado = []

        @depositos.each do |d|		
		
            if options[:lib_hoje] && !options[:lib_hoje].blank? && options[:hoje] && !options[:hoje].blank?
                valor = d.soma_s_d_dt_f_l(status, d.id, options[:hoje], options[:lib_hoje])
            elsif options[:mes] && !options[:mes].blank? 
				valor = d.soma_s_d_dt_f(status, d.id, { :mes => options[:mes]})			
            elsif options[:hoje] && !options[:hoje].blank? 
				valor = d.soma_s_d_dt_f(status, d.id, {:hoje => options[:hoje]})							
            else
				valor = d.soma_s_d(status, d.id)
            end
			
            resultado << "#{d.nome.downcase}"
            resultado << valor
            total += valor
        end

        resultado << "total"
        resultado << total

        retorno = Hash[*resultado]
        return retorno.symbolize_keys
    end
	
	def soma_por_status!(status, options = {})
        #@depositos = Deposito.find(:all)
        total = 0
        resultado = []

        @depositos.each do |d|		
		
            if options[:lib_hoje] &&!options[:lib_hoje].blank?
                valor = d.soma_s_d_dt_f_l!(status, d.id, options[:lib_hoje], options[:lib_hoje])	
            else options[:hoje] && !options[:hoje].blank? 
				valor = d.soma_s_d_dt_f!(status, d.id, options[:hoje])							
            end
			
            resultado << "#{d.nome.downcase}"
            resultado << valor
            total += valor
			
        end

        resultado << "total"
        resultado << total

        retorno = Hash[*resultado]
        return retorno.symbolize_keys	
    end
    
    protected
    
    def load_depositos
      @depositos = Deposito.all
    end
    
    def load_settings
        @config = Setting.first
        @tempo_paineis = @config.tempo_paineis
        @tempo_relatorio = @config.tempo_relatorio
        if @config.exibe_msg
            @msg = @config.msg
            @tempo_msg = @config.tempo_msg
        else
            @msg = ""
        end
    end

end